package org.stvd.common.utils;

import org.stvd.core.util.StringUtil;

/**
 * @Title PwdUtil
 * @Destribution 密码校验工具类
 * @author houzx
 * @date 2020年3月23日
 */
public class PwdUtil {

    /**
     * 密码强度校验：
     * 1) 密码控制只能输入字母、数字、特殊符号(~!@#$%^&*()_+[]{}|\;:'",./<>?)
     * 2) 长度 6-16 位，必须包括字母、数字、特殊符号中的2种
     * 3) 密码不能包含用户名信息
     * @param passWord
     * @param loginAmount
     * @return 校验通过返回null否则返回不通过信息
     */
    public static String chechPwdStrength(String passWord, String loginAmount) {
        //判断密码是否包含数字：包含返回1，不包含返回0
        int i = passWord.matches(".*\\d+.*") ? 1 : 0;
        //判断密码是否包含字母：包含返回1，不包含返回0
        int j = passWord.matches(".*[a-zA-Z]+.*") ? 1 : 0;
        //判断密码是否包含特殊符号(~!@#$%^&*()_+|<>,.?/:;'[]{}\)：包含返回1，不包含返回0
        int k = passWord.matches(".*[~!@#$%^&*()_+|<>,.?/:;'\\[\\]{}\"]+.*") ? 1 : 0;
        //判断密码长度是否在6-16位
        int l = passWord.length();
        if(!StringUtil.isEmpty(loginAmount)) {
            //判断密码中是否包含用户名
            boolean contains = passWord.contains(loginAmount);
            if (i + j + k < 2 || l < 6 || l > 16 || contains) {
                return "密码长度为6-16个字符，由字母、数字、特殊字符中的任意两种组成，且不能包含用户名！";
            }
        }else {
            if (i + j + k < 2 || l < 6 || l > 16) {
                return "密码长度为6-16个字符，由字母、数字、特殊字符中的任意两种组成！";
            }
        }
        return null;
    }
    
    public static String chechPwdStrength(String passWord) {
        return chechPwdStrength(passWord, "");
    }
}
